Relational databases are commonly searched using structured query languages. In the past, to query a conventional relational database, a user needed to have an understanding of the database's underlying schema. With the rapid growth of the Internet, there has been a tremendous increase in the number of users who access information stored in online databases. These users generally have no knowledge of the underlying database schemas and have very limited familiarity with query languages. As a result, the search techniques available to those users are different than the queries a user familiar with the database schema would use. In fact most users use search engines that provide simpler mechanisms, such as keyword searching to access information in online databases.
A user can search for information from a search engine by typing in keywords and submitting those keywords as a search query to the search engine. When the search query has been submitted, the search engine looks for those keywords among a number of the fields and indexes associated with its databases. If the search engine finds documents or other information (“data”) related to the keywords, then the search engine generates a list of that data and displays it to the user as search results. The search results typically list data, such as links to the documents, retrieved by the search engine.
One mechanism search engines use to find documents related to keywords in a search query is a proximity query. A proximity query is often used (either explicitly or implicitly) by a search engine to retrieve and rank information from its databases.
One of the problems with the way current proximity queries are currently handled is that the ordering of the search results is based heavily on the way relationships between separate pieces of data have been defined and weighted in the search engine's database and indexes. Unfortunately, a user is typically unaware of those weights and relationships. Thus, a user submitting a search query to a search engine may place a different weight on a particular relationship than the actual weight assigned by the search engine. As a result, the proximity query may not be able to identify the type of information the user is looking for.
For example, a user may be interested in finding out information about people who work with a man named Jack. Hence, the user submits a search query to a search engine to find out more information about Jack. Unfortunately, if the search engine places more weight on people who exchange emails with Jack rather than on people Jack works with, then the results the search engine finds will not capture the information the user intended to find.
Thus, how the relationships between separate pieces of information are defined and weighted by a search engine affect the search results displayed to the user and often provide the user with unhelpful results. In other words, although the user is interested in finding people who work with Jack, if the search engine database has given a low weight to the “works with” relationship, then persons who work with Jack in the database may get ranked lower in the search results list than other results. As a result, more desirable results may be ranked lower than they should be.
The approaches described in the section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.